package cashpointer.mobile.support;

import android.content.Context;
import android.content.SharedPreferences;

/**
 * Klasa wspierajaca administrowanie preferencjami.
 * @author wojtek
 *
 */
public class PreferencesManager {
	public static final String PREFERENCES_NAME = "CashpointerPreferencesFile";
	
	// Klucze przechowywanych parametrow
	public static final String IS_AUTOUPDATE_ON = "isAutoupdateOn"; // boolean
	public static final String SERVER_ADDRESS = "serverAddress"; // string
	public static final String GOOGLE_KEY_MAPS = "googleKeyMaps"; // string
	public static final String CURRENT_VERSION = "currentVersion"; // string
	public static final String REGION_CHOOSE_ID = "regionChooseId"; // long
	public static final String COUNTRY_CHOOSE_ID = "countryChooseId"; // long
	public static final String LIST_REGION_CHOOSE_ID = "listRegionChooseId"; // long
	public static final String LIST_COUNTRY_CHOOSE_ID = "listCountryChooseId"; // long
	public static final String LIST_CITY_CHOOSE = "listCityChoose"; // string
	public static final String LIST_STREET_CHOOSE = "listStreetChoose"; // string
	public static final String LIST_ONLY_MARKED_CASHPOINTERS_CHOOSE = "listOnlyMarkedCashpointersChoose"; // boolean
	public static final String CASHPOINT_SELECTED_ID = "cashpointSelectedId"; // long
	public static final String CASHPOINT_SELECTED_LATITUDE = "cashpointSelectedLatitude"; // long
	public static final String CASHPOINT_SELECTED_LONGITUDE = "cashpointSelectedLongitude"; // long
	public static final String CASHPOINT_SELECTED_CITY_STREET = "cashpointSelectedCityStreet"; // string
	public static final String CASHPOINT_SELECTED_OWNER = "cashpointSelectedCityOwner"; // string
	public static final String FIND_REGION_CHOOSE_ID = "findRegionChooseId"; // long
	public static final String FIND_CITY_CHOOSE = "findCityChoose"; // string
	public static final String FIND_STREET_CHOOSE = "findStreetChoose"; // string
	public static final String FIND_GPS_LATITUDE = "findGPSLatitude"; // float
	public static final String FIND_GPS_LONGITUDE = "findGPSLongitude"; // float
	public static final String FIND_GPS_REGION = "findGPSRegion"; // string
	public static final String FIND_GPS_COUNTRY = "findGPSCountry"; // string
	public static final String IS_LOCATION_APPROXIMATE = "isLocationApproximate"; // string
	
	// Pozycja na liscie
	public static final String NONE = " wszystkie ";
	
	/**
	 * Funkcja wspomagajaca dodawanie wartosci do preferencji.
	 * @param context
	 * @param key
	 * @param value
	 * @return
	 */
	public static boolean setPreference(Context context, String key, Object value) {
		// Walidacja argumentow.
		if (context != null && key != null && key.length() > 0 && value != null) {
			// Otwieram polaczenie do preferencji w trybie prywatnym.
			SharedPreferences settings = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);	
			
			// Tworze edytor.
			SharedPreferences.Editor editor = settings.edit();
			
			// Dodaje wartosc w zaleznosci od typu.
			if (value instanceof Boolean) {
				Boolean bValue = (Boolean) value;
				editor.putBoolean(key, bValue);
			} else if (value instanceof Float) {
				Float fValue = (Float) value;
				editor.putFloat(key, fValue);
			} else if (value instanceof Integer) {
				Integer iValue = (Integer) value;
				editor.putInt(key, iValue);
			} else if (value instanceof Long) {
				Long lValue = (Long) value;
				editor.putLong(key, lValue);
			} else if (value instanceof String) {
				String sValue = (String) value;
				editor.putString(key, sValue);
			} else {
				return false;
			}
			
			// Komitowanie zmian.
			return editor.commit();
		} else {
			return false;
		}
	}
	
	/**
	 * Pobieram wartosc z preferencji.
	 * @param context
	 * @param key
	 * @param def
	 * @return
	 */
	public static boolean getBoolean(Context context, String key, boolean def) {
		// Walidacja argumentow.
		if (context != null && key != null && key.length() > 0) {
			// Otwieram polaczenie do preferencji w trybie prywatnym.
			SharedPreferences settings = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);	
	
			// Zwracam pobrana wartosc.
			return settings.getBoolean(key, def);
		} else {
			return def;
		}
	}

	/**
	 * Pobieram wartosc z preferencji.
	 * @param context
	 * @param key
	 * @param def
	 * @return
	 */
	public static float getFloat(Context context, String key, float def) {
		// Walidacja argumentow.
		if (context != null && key != null && key.length() > 0) {
			// Otwieram polaczenie do preferencji w trybie prywatnym.
			SharedPreferences settings = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);	
	
			// Zwracam pobrana wartosc.
			return settings.getFloat(key, def);
		} else {
			return def;
		}
	}

	/**
	 * Pobieram wartosc z preferencji.
	 * @param context
	 * @param key
	 * @param def
	 * @return
	 */
	public static int getInt(Context context, String key, int def) {
		// Walidacja argumentow.
		if (context != null && key != null && key.length() > 0) {
			// Otwieram polaczenie do preferencji w trybie prywatnym.
			SharedPreferences settings = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);	
	
			// Zwracam pobrana wartosc.
			return settings.getInt(key, def);
		} else {
			return def;
		}
	}

	/**
	 * Pobieram wartosc z preferencji.
	 * @param context
	 * @param key
	 * @param def
	 * @return
	 */
	public static long getLong(Context context, String key, long def) {
		// Walidacja argumentow.
		if (context != null && key != null && key.length() > 0) {
			// Otwieram polaczenie do preferencji w trybie prywatnym.
			SharedPreferences settings = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);	
	
			// Zwracam pobrana wartosc.
			return settings.getLong(key, def);
		} else {
			return def;
		}
	}
	
	/**
	 * Pobieram wartosc z preferencji.
	 * @param context
	 * @param key
	 * @param def
	 * @return
	 */
	public static String getString(Context context, String key, String def) {
		// Walidacja argumentow.
		if (context != null && key != null && key.length() > 0) {
			// Otwieram polaczenie do preferencji w trybie prywatnym.
			SharedPreferences settings = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);	
	
			// Zwracam pobrana wartosc.
			return settings.getString(key, def);
		} else {
			return def;
		}
	}
}
